home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
vol_200
/
284_01
/
trace.c
< prev
next >
Wrap
Text File
|
1989-03-11
|
12KB
|
415 lines
/* trace.c - 8080 instruction tracer */
#include <stdio.h>
#include "compile.h"
#include "config.h"
#include "defs.h"
#ifndef isdigit
#define isdigit(c) ( (c) >= '0' && (c) <= '9' )
#endif
#define X RegX(*rp)
#define A RegA(*rp)
#define C RegC(*rp)
#define BC RegBC(*rp)
#define DE RegDE(*rp)
#define HL RegHL(*rp)
#define Addr(x) ( ( WORD )( (x) - Mem ) )
BOOL tflag = 0; /* trace modes: 1 for mnemonic, 2 for registers, */
/* 4 for statistics */
WORD trlo = 0; /* lowest address of trace range */
WORD trhi = MEMSIZE; /* highest address of trace range */
#if TRACE
long Freq [ 256 ]; /* frequency counter */
/* mnemonic table for dis-assembling */
struct { short args; char * mnem; } OpCode [ 256 ] = {
/* 0x00 */ { 0, "NOP" },
/* 0x01 */ { 2, "LXI B," },
/* 0x02 */ { 0, "STAX B" },
/* 0x03 */ { 0, "INX B" },
/* 0x04 */ { 0, "INR B" },
/* 0x05 */ { 0, "DER B" },
/* 0x06 */ { 1, "MVI B," },
/* 0x07 */ { 0, "RLC" },
/* 0x08 */ { 0, "???" },
/* 0x09 */ { 0, "DAD B" },
/* 0x0A */ { 0, "LDAX B" },
/* 0x0B */ { 0, "DEX B" },
/* 0x0C */ { 0, "INR C" },
/* 0x0D */ { 0, "DER C" },
/* 0x0E */ { 1, "MVI C," },
/* 0x0F */ { 0, "RRC" },
/* 0x10 */ { 0, "???" },
/* 0x11 */ { 2, "LXI D," },
/* 0x12 */ { 0, "STAX D" },
/* 0x13 */ { 0, "INX D" },
/* 0x14 */ { 0, "INR D" },
/* 0x15 */ { 0, "DCR D" },
/* 0x16 */ { 1, "MVI D," },
/* 0x17 */ { 0, "RAL" },
/* 0x18 */ { 0, "???" },
/* 0x19 */ { 0, "DAD D" },
/* 0x1A */ { 0, "LDAX D" },
/* 0x1B */ { 0, "DEX D" },
/* 0x1C */ { 0, "INR E" },
/* 0x1D */ { 0, "DER E" },
/* 0x1E */ { 1, "MVI E," },
/* 0x1F */ { 0, "RRA" },
/* 0x20 */ { 0, "???" },
/* 0x21 */ { 2, "LXI H," },
/* 0x22 */ { 2, "SHLD " },
/* 0x23 */ { 0, "INX H" },
/* 0x24 */ { 0, "INR H" },
/* 0x25 */ { 0, "DER H" },
/* 0x26 */ { 1, "MVI H," },
/* 0x27 */ { 0, "DAA" },
/* 0x28 */ { 0, "???" },
/* 0x29 */ { 0, "DAD H" },
/* 0x2A */ { 2, "LHLD " },
/* 0x2B */ { 0, "DEX H" },
/* 0x2C */ { 0, "INR L" },
/* 0x2D */ { 0, "DER L" },
/* 0x2E */ { 1, "MVI L," },
/* 0x2F */ { 0, "CMA" },
/* 0x30 */ { 0, "???" },
/* 0x31 */ { 2, "LXI SP," },
/* 0x32 */ { 2, "STA " },
/* 0x33 */ { 0, "INX SP" },
/* 0x34 */ { 0, "INR M" },
/* 0x35 */ { 0, "DER M" },
/* 0x36 */ { 1, "MVI M," },
/* 0x37 */ { 0, "STC" },
/* 0x38 */ { 0, "???" },
/* 0x39 */ { 0, "DAD SP" },
/* 0x3A */ { 2, "LDA " },
/* 0x3B */ { 0, "DEX SP" },
/* 0x3C */ { 0, "INR A" },
/* 0x3D */ { 0, "DER A" },
/* 0x3E */ { 1, "MVI A," },
/* 0x3F */ { 0, "CMC" },
/* 0x40 */ { 0, "MOV B,B" },
/* 0x41 */ { 0, "MOV B,C" },
/* 0x42 */ { 0, "MOV B,D" },
/* 0x43 */ { 0, "MOV B,E" },
/* 0x44 */ { 0, "MOV B,H" },
/* 0x45 */ { 0, "MOV B,L" },
/* 0x46 */ { 0, "MOV B,M" },
/* 0x47 */ { 0, "MOV B,A" },
/* 0x48 */ { 0, "MOV C,B" },
/* 0x49 */ { 0, "MOV C,C" },
/* 0x4A */ { 0, "MOV C,D" },
/* 0x4B */ { 0, "MOV C,E" },
/* 0x4C */ { 0, "MOV C,H" },
/* 0x4D */ { 0, "MOV C,L" },
/* 0x4E */ { 0, "MOV C,M" },
/* 0x4F */ { 0, "MOV C,A" },
/* 0x50 */ { 0, "MOV D,B" },
/* 0x51 */ { 0, "MOV D,C" },
/* 0x52 */ { 0, "MOV D,D" },
/* 0x53 */ { 0, "MOV D,E" },
/* 0x54 */ { 0, "MOV D,H" },
/* 0x55 */ { 0, "MOV D,L" },
/* 0x56 */ { 0, "MOV D,M" },
/* 0x57 */ { 0, "MOV D,A" },
/* 0x58 */ { 0, "MOV E,B" },
/* 0x59 */ { 0, "MOV E,C" },
/* 0x5A */ { 0, "MOV E,D" },
/* 0x5B */ { 0, "MOV E,E" },
/* 0x5C */ { 0, "MOV E,H" },
/* 0x5D */ { 0, "MOV E,L" },
/* 0x5E */ { 0, "MOV E,M" },
/* 0x5F */ { 0, "MOV E,A" },
/* 0x60 */ { 0, "MOV H,B" },
/* 0x61 */ { 0, "MOV H,C" },
/* 0x62 */ { 0, "MOV H,D" },
/* 0x63 */ { 0, "MOV H,E" },
/* 0x64 */ { 0, "MOV H,H" },
/* 0x65 */ { 0, "MOV H,L" },
/* 0x66 */ { 0, "MOV H,M" },
/* 0x67 */ { 0, "MOV H,A" },
/* 0x68 */ { 0, "MOV L,B" },
/* 0x69 */ { 0, "MOV L,C" },
/* 0x6A */ { 0, "MOV L,D" },
/* 0x6B */ { 0, "MOV L,E" },
/* 0x6C */ { 0, "MOV L,H" },
/* 0x6D */ { 0, "MOV L,L" },
/* 0x6E */ { 0, "MOV L,M" },
/* 0x6F */ { 0, "MOV L,A" },
/* 0x70 */ { 0, "MOV M,B" },
/* 0x71 */ { 0, "MOV M,C" },
/* 0x72 */ { 0, "MOV M,D" },
/* 0x73 */ { 0, "MOV M,E" },
/* 0x74 */ { 0, "MOV M,H" },
/* 0x75 */ { 0, "MOV M,L" },
/* 0x76 */ { 0, "HLT" },
/* 0x77 */ { 0, "MOV M,A" },
/* 0x78 */ { 0, "MOV A,B" },
/* 0x79 */ { 0, "MOV A,C" },
/* 0x7A */ { 0, "MOV A,D" },
/* 0x7B */ { 0, "MOV A,E" },
/* 0x7C */ { 0, "MOV A,H" },
/* 0x7D */ { 0, "MOV A,L" },
/* 0x7E */ { 0, "MOV A,M" },
/* 0x7F */ { 0, "MOV A,A" },
/* 0x80 */ { 0, "ADD B" },
/* 0x81 */ { 0, "ADD C" },
/* 0x82 */ { 0, "ADD D" },
/* 0x83 */ { 0, "ADD E" },
/* 0x84 */ { 0, "ADD H" },
/* 0x85 */ { 0, "ADD L" },
/* 0x86 */ { 0, "ADD M" },
/* 0x87 */ { 0, "ADD A" },
/* 0x88 */ { 0, "ADC B" },
/* 0x89 */ { 0, "ADC C" },
/* 0x8A */ { 0, "ADC D" },
/* 0x8B */ { 0, "ADC E" },
/* 0x8C */ { 0, "ADC H" },
/* 0x8D */ { 0, "ADC L" },
/* 0x8E */ { 0, "ADC M" },
/* 0x8F */ { 0, "ADC A" },
/* 0x90 */ { 0, "SUB B" },
/* 0x91 */ { 0, "SUB C" },
/* 0x92 */ { 0, "SUB D" },
/* 0x93 */ { 0, "SUB E" },
/* 0x94 */ { 0, "SUB H" },
/* 0x95 */ { 0, "SUB L" },
/* 0x96 */ { 0, "SUB M" },
/* 0x97 */ { 0, "SUB A" },
/* 0x98 */ { 0, "SBB B" },
/* 0x99 */ { 0, "SBB C" },
/* 0x9A */ { 0, "SBB D" },
/* 0x9B */ { 0, "SBB E" },
/* 0x9C */ { 0, "SBB H" },
/* 0x9D */ { 0, "SBB L" },
/* 0x9E */ { 0, "SBB M" },
/* 0x9F */ { 0, "SBB A" },
/* 0xA0 */ { 0, "ANA B" },
/* 0xA1 */ { 0, "ANA C" },
/* 0xA2 */ { 0, "ANA D" },
/* 0xA3 */ { 0, "ANA E" },
/* 0xA4 */ { 0, "ANA H" },
/* 0xA5 */ { 0, "ANA L" },
/* 0xA6 */ { 0, "ANA M" },
/* 0xA7 */ { 0, "ANA A" },
/* 0xA8 */ { 0, "XRA B" },
/* 0xA9 */ { 0, "XRA C" },
/* 0xAA */ { 0, "XRA D" },
/* 0xAB */ { 0, "XRA E" },
/* 0xAC */ { 0, "XRA H" },
/* 0xAD */ { 0, "XRA L" },
/* 0xAE */ { 0, "XRA M" },
/* 0xAF */ { 0, "XRA A" },
/* 0xB0 */ { 0, "ORA B" },
/* 0xB1 */ { 0, "ORA C" },
/* 0xB2 */ { 0, "ORA D" },
/* 0xB3 */ { 0, "ORA E" },
/* 0xB4 */ { 0, "ORA H" },
/* 0xB5 */ { 0, "ORA L" },
/* 0xB6 */ { 0, "ORA M" },
/* 0xB7 */ { 0, "ORA A" },
/* 0xB8 */ { 0, "CMP B" },
/* 0xB9 */ { 0, "CMP C" },
/* 0xBA */ { 0, "CMP D" },
/* 0xBB */ { 0, "CMP E" },
/* 0xBC */ { 0, "CMP H" },
/* 0xBD */ { 0, "CMP L" },
/* 0xBE */ { 0, "CMP M" },
/* 0xBF */ { 0, "CMP A" },
/* 0xC0 */ { 0, "RNZ" },
/* 0xC1 */ { 0, "POP B" },
/* 0xC2 */ { 2, "JNZ " },
/* 0xC3 */ { 2, "JMP " },
/* 0xC4 */ { 2, "CNZ " },
/* 0xC5 */ { 0, "PUSH B" },
/* 0xC6 */ { 1, "ADI " },
/* 0xC7 */ { 0, "RST 0" },
/* 0xC8 */ { 0, "RZ" },
/* 0xC9 */ { 0, "RET" },
/* 0xCA */ { 2, "JZ " },
/* 0xCB */ { 0, "???" },
/* 0xCC */ { 2, "CZ " },
/* 0xCD */ { 2, "CALL " },
/* 0xCE */ { 1, "ACI " },
/* 0xCF */ { 0, "RST 1" },
/* 0xD0 */ { 0, "RNC" },
/* 0xD1 */ { 0, "POP D" },
/* 0xD2 */ { 2, "JNC " },
/* 0xD3 */ { 1, "OUT " },